/***************************************************************************
 创建者：华磊
 开始时间：         : 2020.12.13
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 2017.02.23　增加TIMAOUT可选功能
 2017.02.24    增加超时时间设置功能

 ***************************************************************************
 *   等待指令属性编辑视窗
*                                                                         *
 ***************************************************************************/
#ifndef WAITINSTRUCTIONVIEW_H
#define WAITINSTRUCTIONVIEW_H

#include "waitinstructionview_global.h"
#include <QWidget>
#include <QTranslator>

class ProgramView;

namespace Ui {
class WaitInstructionView;
}

/**
 * @brief The EM_WAIT_INSTRUCTION enum　等待类型
 */
enum EM_WAIT_INSTRUCTION
{
    EM_WAIT_INSTRUCTION_TIME = 1,
    EM_WAIT_INSTRUCTION_R = 2,
    EM_WAIT_INSTRUCTION_CONDITION = 3
};

/**
 * @brief The WaitInstructionView class　等待指令属性编辑视窗
 */
class WAITINSTRUCTIONVIEWSHARED_EXPORT WaitInstructionView : public QWidget
{
    Q_OBJECT

public:
    WaitInstructionView(int styleId,QWidget *parent = 0);

    /**
     * @brief updateView　更新设置数据到界面控件上
     */
    void updateView();
    /**
     * @brief getInput　获取界面输入数据
     */
    void getInput();

    void changeLanguage(int language);

    void initialDisplayStyle(int styleId);

private:
    QTranslator translator;

public:
    ProgramView *programView;

    /**
     * @brief waitInstruction　等待指令
     */
    QString waitInstruction;
    /**
     * @brief waitType　等待类型　1:等待时间  2:等待寄存器  3:等待条件
     */
    int waitType;
    /**
     * @brief waitTime　等待时间
     */
    float waitTime;
    /**
     * @brief rIndex　寄存器编号
     */
    QString rIndex;
    /**
     * @brief waitCondition　等待的条件
     */
    QString waitCondition;
    /**
     * @brief note　指令注释
     */
    QString note;

    /**
     * @brief timeoutSelectedFlag　超时转移选择标志　０：未选择　１：选择
     */
    int timeoutSelectedFlag;
    /**
     * @brief timeoutLblIndex　超时转移标签号
     */
    int timeoutLblIndex;
    /**
     * @brief timeoutLblIndexType　标签编号表示　０：常数　１：R
     */
    int timeoutLblIndexType;

    /**
     * @brief limitWaitTimeSelectFlag　手动设置超时等待时间标志　０：未设置　１：设置
     */
    int limitWaitTimeSelectFlag;
    /**
     * @brief limitWaitTime　超时等待时间
     */
    float limitWaitTime;

    /**
     * @brief limitWaitTimeType　超时等待事件类型　０：float time   1: R
     */
    int limitWaitTimeType;

    QString timeoutRIndex;

signals:
    /**
     * @brief selectWaitTime　选择等待时间
     */
    void selectWaitTime();
    /**
     * @brief selectWaitR　选择等待R
     */
    void selectWaitR();
    /**
     * @brief selectWaitCondition　选择等待条件
     */
    void selectWaitCondition();

    /**
     * @brief clearNote　清除指令注释
     */
    void clearNote();
    /**
     * @brief finishEditInstruction　完成指令编辑
     */
    void finishEditInstruction();
    /**
     * @brief saveInstruction　保存指令
     * @param waitInstruction　编辑完成指令
     */
    void saveInstruction(QString waitInstruction);

    /**
     * @brief isSelectTimeout　是否选择超时转移
     */
    void isSelectTimeout();
    /**
     * @brief isSelectSettingLimitTime　是否选择手动设置超时等待时间
     */
    void isSelectSettingLimitTime();

private slots:
    /**
     * @brief on_waitTime_radioButton_clicked　选择等待时间槽函数
     */
    void on_waitTime_radioButton_clicked();

    /**
     * @brief on_waitR_radioButton_clicked　选择等待寄存器槽函数
     */
    void on_waitR_radioButton_clicked();

    /**
     * @brief on_waitCondition_radioButton_clicked　选择等待条件槽函数
     */
    void on_waitCondition_radioButton_clicked();

    /**
     * @brief on_clearNote_Btn_clicked　清除指令注释槽函数
     */
    void on_clearNote_Btn_clicked();

    /**
     * @brief on_forward_Btn_clicked　上一页槽函数
     */
    void on_forward_Btn_clicked();

    /**
     * @brief on_save_Btn_clicked　保存指令槽函数
     */
    void on_save_Btn_clicked();

    void on_timeout_checkBox_clicked();

    void on_limitWaitTime_checkBox_clicked();

    void on_limitWaitTimeType_comboBox_currentIndexChanged(int index);

    /**
     * @brief on_waitCondition_lineEdit_textChanged 2017.04.13 解决:点击TIMEOUT按钮后,没有缓存数据,被清掉
     * @param arg1
     */
    void on_waitCondition_lineEdit_textChanged(const QString &arg1);

private:
    Ui::WaitInstructionView *ui;
};

#endif // WAITINSTRUCTIONVIEW_H
